package com.may.nio;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @program: com.may.netty
 * @description:
 * @author: Bobby.Ma
 * @create: 2020-08-02 17:01
 * <p>
 * 说明：
 * 1.MappedByteBuffer可以让文件直接在堆外内存中修改，操作系统不需要拷贝一次
 **/
public class MappedByteBufferTest {

    public static void main(String[] args) throws IOException {
        RandomAccessFile file = new RandomAccessFile("C:\\Users\\19167\\Documents\\read.txt", "rw");
        FileChannel channel = file.getChannel();
        /*
            参数说明：
                1.表示使用读写模式;
                2.可以直接修改的起始位置;
                3.映射到内存的大小，即将文件的 n 个字节映射到堆外内存，则可以直接修改的范围就是 [0,5)。
        */
        MappedByteBuffer byteBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
        byteBuffer.put(0, (byte) 'H');//表示将下标为 0 位置的内容修改为 H
        byteBuffer.put(3, (byte) '9');
        file.close();
    }
}
